نمایندگی زیمنس: استفاده از دستورات شیفت و چرخش (Shift and Rotate Instructions)
ارسال شده در تاریخ: 05 اردیبهشت 1396چاپالف) دستورات شیفت
دستورات شیفت برای جابجایی بیت به بیت محتویات آکومولاتور 1 به چپ یا راست بکار میروند. شیفت به چپ معادل عمل ضرب است. شیفت به اندازه ی n بیت به چپ ، معادل ضرب محتوای آکومولاتور در عدد 2n است. به عنوان مثال ، با یک شیفت چپ عدد 2 برابر میشود. شیفت به راست معادل عمل تقسیم است. شیفت به اندازه ی n بیت به راست معادل تقسیم محتوای آکومولاتور بر عدد 2n میباشد. هب عنوان مثال ، با یک شیفت راست عدد نصف میشود.
در هر بار شیفت چپ ، یک 0 از سمت راست وارد بیت اول آکومولاتور شده و در هر بار شیفت راست ، با توجه به مقدار بیت آخر ( یعنی بیت پانزدهم که علامت عدد را نشان میدهد Sign Bit ) 0 یا 1 از سمت چپ وارد آخرین آکومولاتور میشود. به عبارت دیگر ، اگر عدد منفی باشد ، 1 و اگر عدد مثبت باشد ، 0 وارد آکومولاتور میشود. در هر دو نوع شیفت ، آخرین بیت شیفت شده به CC1 ( از بیت های Status Word ) بار میشود و بیت های OV , CCO به صفر ریست میشوند. میتوان از بیت CC1 برای پرش (Jump) استفاده کرد.
دستورات شیفت غیر مشروط هستند ، یعنی اجرای آنها به وضعیت بیت های Status Word بستگی ندارد. این دستورات پس از اجرا بر RLO تاثیر نمیگذارند . وضعیت Status Word برای تمام دستورات شیفت بصورت زیر است :
ب) دستورات چرخش
دستورات Rotate برای چرخش بیت به بیت محتویات آکومولاتور 1 به چپ یا راست بکار می روند. فرق این دستورات با دستورات شیفت این است که در Shift از یکطرف 0 وارد آکومولاتور شده و جایگزین اولین یا آخرین بیت می گردد ، ولی در Rotate آخرین بیت بجای اولین بیت می نشیند و از بیرون چیزی وارد آکومولاتور نمی شود. آخرین بیت چرخش داده شده به CC1 ( از بیت های Status Word ) بار می شود و بیت های CC0 و OV به صفر ریست می شوند. میتوان از بیت CC1 برای پرش (Jump) استفاده کرد.
دستورات شیفت برای جابجایی بیت به بیت محتویات آکومولاتور 1 به چپ یا راست بکار میروند. شیفت به چپ معادل عمل ضرب است. شیفت به اندازه ی n بیت به چپ ، معادل ضرب محتوای آکومولاتور در عدد 2n است. به عنوان مثال ، با یک شیفت چپ عدد 2 برابر میشود. شیفت به راست معادل عمل تقسیم است. شیفت به اندازه ی n بیت به راست معادل تقسیم محتوای آکومولاتور بر عدد 2n میباشد. هب عنوان مثال ، با یک شیفت راست عدد نصف میشود.
در هر بار شیفت چپ ، یک 0 از سمت راست وارد بیت اول آکومولاتور شده و در هر بار شیفت راست ، با توجه به مقدار بیت آخر ( یعنی بیت پانزدهم که علامت عدد را نشان میدهد Sign Bit ) 0 یا 1 از سمت چپ وارد آخرین آکومولاتور میشود. به عبارت دیگر ، اگر عدد منفی باشد ، 1 و اگر عدد مثبت باشد ، 0 وارد آکومولاتور میشود. در هر دو نوع شیفت ، آخرین بیت شیفت شده به CC1 ( از بیت های Status Word ) بار میشود و بیت های OV , CCO به صفر ریست میشوند. میتوان از بیت CC1 برای پرش (Jump) استفاده کرد.
دستورات شیفت غیر مشروط هستند ، یعنی اجرای آنها به وضعیت بیت های Status Word بستگی ندارد. این دستورات پس از اجرا بر RLO تاثیر نمیگذارند . وضعیت Status Word برای تمام دستورات شیفت بصورت زیر است :
دستورات شیفت عبارتند از :
SSI Shift Sign Integer (16-bit)
SSD Shift Sign Double Integer (32-bit)
SLW Shift Left Word (16-bit)
SRW Shift Right Word (16-bit)
SLD Shift Left Double Word (32-bit)
SSD Shift Sign Double Integer (32-bit)
SLW Shift Left Word (16-bit)
SRW Shift Right Word (16-bit)
SLD Shift Left Double Word (32-bit)
ب) دستورات چرخش
دستورات Rotate برای چرخش بیت به بیت محتویات آکومولاتور 1 به چپ یا راست بکار می روند. فرق این دستورات با دستورات شیفت این است که در Shift از یکطرف 0 وارد آکومولاتور شده و جایگزین اولین یا آخرین بیت می گردد ، ولی در Rotate آخرین بیت بجای اولین بیت می نشیند و از بیرون چیزی وارد آکومولاتور نمی شود. آخرین بیت چرخش داده شده به CC1 ( از بیت های Status Word ) بار می شود و بیت های CC0 و OV به صفر ریست می شوند. میتوان از بیت CC1 برای پرش (Jump) استفاده کرد.
دستورات چرخش عبارتند از :
RLD Rotate Left Double Word (32-bit)
RRD Rotate Right Double Word (32-bit)
RLDA Rotate ACCU1 Left via CC 1 (32-bit)
RRDA Rotate ACCU1 Right via CC 1 (32-bit)
RRD Rotate Right Double Word (32-bit)
RLDA Rotate ACCU1 Left via CC 1 (32-bit)
RRDA Rotate ACCU1 Right via CC 1 (32-bit)